
//https://leetcode.cn/problems/rotate-list/description/?envType=problem-list-v2&envId=ex0k24j
//核心思想1：把链表中的节点存到 vec 中，然后操作旋转数组，最后再把值存到数组中；

int main() {
    std::vector<int> arr = {1, 2, 3, 4, 5, 6, 7};
    int k = 3;
    int n = arr.size();
    k %= n; // 防止 k 大于数组长度的情况
    //rotateArray(arr, k);
    std::reverse(arr.begin(),arr.end());
    std::reverse(arr.begin(),arr.begin()+k);
    std::reverse(arr.begin()+k,arr.end());

    for (int n : arr) {
        std::cout<< n << ' ';
    }
    std::cout<<std::endl;

    return 0;
}

class Solution {
public:
    ListNode* rotateRight(ListNode* head, int k) {
        if(head==nullptr) return nullptr;
        std::vector<int> arr;
        ListNode* cur=head;
        int len=0;
        while(cur){
            arr.emplace_back(cur->val);
            ++len;
            cur=cur->next;
        }
        k=k%len;
        if(k==0){
            return head;
        }

        std::reverse(arr.begin(),arr.end());
        std::reverse(arr.begin(),arr.begin()+k);
        std::reverse(arr.begin()+k,arr.end());
        cur=head;
        int index=0;
        while(cur){
            cur->val=arr[index];
            cur=cur->next;
            ++index;
        }
        return head;
    }
};